1. Field
This disclosure generally relates to software integration. More particularly, the disclosure relates to detecting work completion in a software integration environment.
2. General Background
A business integration environment allows a plurality of business applications to work together. In particular, a source enterprise application may be utilized to transmit business data to a target enterprise application. The source enterprise application first sends data to a source adapter component. The source adapter component is a standardized interface that allows the source enterprise application to communicate with process server components. Accordingly, the business data may then be transmitted from the source adapter component to several process server components. Further, the process server components may then transmit the business data to a target adapter component. The target adapter component is a standardized interface that allows the process server components to communicate with the target enterprise application. Finally, the target adapter component may then transmit the business data to the target enterprise application so that the target enterprise application can utilize the business data. Applications, such as external web services, web applications, and java clients can directly invoke process server components that update an enterprise application via the adapter associated with the enterprise application.
The source enterprise application may generate the business data in a particular order. This business data is modeled as one or more business objects, which are instances of a framework for modeling and manipulating data. In one embodiment, the one or more business objects are defined in XML. Further, in one embodiment, java can be utilized to programmatically create instances and programmatically manipulate business data. After creating the customer business object, the source enterprise application may send a series of updates to the customer business object, e.g., a first update and a second update. Accordingly, the target enterprise application should receive the customer business object, the first update, and the second update from the source enterprise application in the same order in which the source enterprise application sent the business data to ensure accurate processing.
A synchronous single threaded environment allows for a target component to return an invoked function, thereby providing an indication to the source component that invoked the method that the target component has completed its use of the function. The source component and the target component are tightly coupled as the source component can both request an invocation on the target computer and receive an indication back from the target computer regarding work completion. Accordingly, the source component is aware of when it can make a subsequent request for another invocation on the target computer. Similarly, other source components, which did not make the initial invocation, that are tightly coupled with the target component can also receive an indication of when the target component has completed the initial work so that they know when the target component is available to perform their requests.
Asynchronous communication does not provide for this type of two-way communication. In asynchronous communication, a source component can send data to a target component and return without having to wait for the data to be processed. Therefore, the source component and the target component are loosely coupled components. For instance, the source component may send an asynchronous message to the target component requesting use of a function. Further, the target computer can process the data at a later time. Accordingly, the source component has no way of knowing when the work by the target component has been completed. Further, other components that are loosely coupled with the target component have no way of knowing if the invocation requested by the source component has been completed by the target component. These other components may be attempting to utilize the target component with respect to the same business data for which the source component requested an invocation from the target component.
The problem is further complicated in an asynchronous multi-threaded environment, which typically allows the processing of messages to be performed in parallel by multiple threads. In a multi-threaded environment, it is possible that one thread can race ahead of another thread and cause the messages to be processed out of order. The processing of the messages is typically performed in parallel by multiple threads. In a multi-threaded environment, it is possible that one thread can race ahead of another thread and cause the messages to be processed out of order. In the example above, a multi-threaded environment would allow the target enterprise application to receive and process the first update prior to creating the customer business object. If the target enterprise application receives the first update prior to creating the customer business object, the target enterprise application has nothing to update. As a result, one or more exceptions may be created in the target enterprise application, which may cause a variety of problems and ultimately lead to errors.
Simply utilizing a synchronous single threaded environment is not a viable solution because such an environment is not scalable. A large number of computing devices will not work optimally in such an environment. Business are generally interested in utilizing batch processing, which allows a series of jobs that do not require any further user input to processed at one time. Accordingly, businesses are more interested in working in an asynchronous multi-threaded environment because of the ability to utilize parallel processing, which allows for greater efficiency with respect to processing such as batch processing.
Specialized components could also be built to ensure that threads are processed in the intended order. However, such an approach is intrusive. In other words, businesses would have to purchase additional software components that would have to be configured to work with existing software technology. Further, the existing software technology may have to be configured to allow for integration of the specialized components. This intrusive configuration may lead to a large expense and loss of valuable productivity time for most businesses.